package com.tangcco.lockwell.repository;

import com.tangcco.lockwell.domain.WrongQuestion;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
/**
 * 错题表
 * @author 张恒科
 * 用于映射数据库中的wrong_questiont表
 */
@Mapper
public interface WrongQuestionMapper {
    // 插入一条错题记录到wrong_question表，并返回自动生成的主键值回填到实体对象的wrongId属性
    int insertWrongQuestion(WrongQuestion wrongQuestion);

    // 根据wrong_id（自增Id）查询错题记录
    WrongQuestion selectWrongQuestionById(int wrongId);


    // 根据题目ID查询对应的错题记录列表
    List<WrongQuestion> selectWrongQuestionsByQuestionId(int questionId);

    // 更新错题记录
    int updateWrongQuestion(WrongQuestion wrongQuestion);

    // 根据wrong_id删除错题记录
    int deleteWrongQuestionById(int wrongId);

    // 查询所有错题记录
    List<WrongQuestion> selectAllWrongQuestions();

    // 根据用户ID和题目ID查询对应的错题记录（用于特定用户和题目组合的查找）
    WrongQuestion selectWrongQuestionByUserIdAndQuestionId(int userId, int questionId);

    // 查询某个用户的错题记录总数
    int countWrongQuestionsByUserId(int userId);

    // 查询所有用户在某道题目上的错题记录总数
    int countWrongQuestionsByQuestionId(int questionId);

    // 批量插入错题记录（传入错题记录列表）
    int insertWrongQuestionsBatch(List<WrongQuestion> wrongQuestions);

    // 批量删除错题记录（传入要删除的id列表）
    int deleteWrongQuestionsByIds(List<Integer> idList);

    // 根据用户ID查询错误次数降序排列的前N条错题记录（传入用户ID和要查询的记录数量N）
    List<WrongQuestion> selectTopNWrongQuestionsByUserId(int userId, int num);
    //根据用户Id查询
    List<WrongQuestion> selectWrongQuestionsByUserId(@Param("userId") int userId,@Param("subjectId")Integer subjectId);

    /**
     * 根据条件查询错题记录列表
     * @param wrongQuestion
     * @return
     */
    List<WrongQuestion> selectList(WrongQuestion wrongQuestion);

    /**
     * 按条件新增
     * @param record
     * @return
     */
    int insertSelective(WrongQuestion record);

    /**
     * 按条件编辑
     * @param wrongQuestion
     * @return
     */
    int updateByPrimaryKeySelective(WrongQuestion wrongQuestion);
}